package com.lonely.fx.table_view;

import com.lonely.fx.table_view.entity.SimplePerson;
import javafx.application.Application;
import javafx.beans.binding.DoubleBinding;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.SelectionMode;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TablePosition;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;

/**
 * @date: 2022-08-02 16:37
 * @author: ztkj-hzb
 * @description: tableview  选择模式 属性是设置
 **/
public class SelectModelSettingMain extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    /**
     *
     */
    @Override
    public void start(Stage primaryStage) throws Exception {

        AnchorPane anchorPane = new AnchorPane();

        TableView<SimplePerson> tableView = new TableView<>();

        //设置宽高
        tableView.setPrefSize(600, 400);

        //设置数据
        ObservableList<SimplePerson> persons = FXCollections.observableArrayList();

        persons.add(new SimplePerson("小天", 20, "湖北省", false));
        persons.add(new SimplePerson("小地", 30, "湖南省", true));
        persons.add(new SimplePerson("小玄", 40, "广东省", false));
        persons.add(new SimplePerson("小黄", 50, "浙江省", true));
        tableView.setItems(persons);

        //创建列
        TableColumn<SimplePerson, String> nameTableCol = new TableColumn<>("用户名");
        TableColumn<SimplePerson, Number> ageTableCol = new TableColumn<>("年龄");
        TableColumn<SimplePerson, String> addressTableCol = new TableColumn<>("地址");
        TableColumn<SimplePerson, Boolean> marriedTableCol = new TableColumn<>("是否已婚");
        tableView.getColumns().addAll(nameTableCol, ageTableCol, addressTableCol, marriedTableCol);

        nameTableCol.setCellValueFactory(new PropertyValueFactory<>("name"));
        ageTableCol.setCellValueFactory(new PropertyValueFactory<>("age"));
        addressTableCol.setCellValueFactory(new PropertyValueFactory<>("address"));
        marriedTableCol.setCellValueFactory(new PropertyValueFactory<>("married"));

        anchorPane.getChildren().addAll(tableView);
        primaryStage.setScene(new Scene(anchorPane));
        primaryStage.setWidth(600);
        primaryStage.setHeight(500);
        primaryStage.show();

        //调整单元格宽度
        DoubleBinding divide = tableView.widthProperty().divide(tableView.getVisibleLeafColumns().size());
        for (TableColumn<SimplePerson, ?> visibleLeafColumn : tableView.getVisibleLeafColumns()) {
            visibleLeafColumn.prefWidthProperty().bind(divide.subtract(1));
        }

        //TODO 选择行相关操作

        //tableview 默认是选择整行

        //选择指定行--根据索引
        //tableView.getSelectionModel().select(1);
        //选择指定行--根据值
        //tableView.getSelectionModel().select(persons.get(2));
        //选择第一行
        //tableView.getSelectionModel().selectFirst();
        //选择最后一行
        //tableView.getSelectionModel().selectLast();

        //获取选择的行数据
        //System.out.println("当前选择的行：" + tableView.getSelectionModel().getSelectedIndex());
        //System.out.println("当前选择的行对象：" + tableView.getSelectionModel().getSelectedItem());

        //切换选择行时触发
        /*tableView.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {
            @Override
            public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
                System.out.println("当前选择的行索引" + newValue);
            }
        });*/


        //TODO 设置多行
        tableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
        //选择指定行--多选
        //tableView.getSelectionModel().selectIndices(0,2,3);
        //全选
        //tableView.getSelectionModel().selectAll();
        //选择指定区间的行
        //tableView.getSelectionModel().selectRange(0, 2);

        /*tableView.getSelectionModel().getSelectedItems().addListener(new ListChangeListener<SimplePerson>() {
            @Override
            public void onChanged(Change<? extends SimplePerson> c) {
                System.out.println("当前选择的行的数量:" + c.getList().size());
            }
        });*/

        //TODO 设置选择单元格
        tableView.getSelectionModel().setCellSelectionEnabled(true);

        //选择指定行得指定列的单元格
        tableView.getSelectionModel().select(1, ageTableCol);
        //选择上面的单元格
        //tableView.getSelectionModel().selectAboveCell();
        //选择下面的单元格
        //tableView.getSelectionModel().selectBelowCell();
        //选择左边的单元格
        //tableView.getSelectionModel().selectLeftCell();
        //选择右边的单元格
        //tableView.getSelectionModel().selectRightCell();

        System.out.println("当前选中的单元格数量：" + tableView.getSelectionModel().getSelectedCells().size());

        tableView.getSelectionModel().getSelectedCells().addListener(new ListChangeListener<TablePosition>() {
            @Override
            public void onChanged(Change<? extends TablePosition> c) {
                ObservableList<TablePosition> positions = (ObservableList<TablePosition>) c.getList();
                for (TablePosition position : positions) {
                    System.out.println(String.format("当前选择了：row:%s----col:%s----colName:%s ",
                            position.getRow(),position.getColumn(),position.getTableColumn().getText()));
                }


            }
        });






    }
}
